#include "BlockQueue.hpp"
#include <unistd.h>
using namespace BlockQueueModule;


// 生产
void *production(void *age)
{
	BlockQueue<int> *bq = static_cast<BlockQueue<int> *>(age);
	int data = 10;
	while (true)
	{
		// sleep(2);
		bq->Equeue(data);
        printf("producter 生产了一个数据: %d\n", data);
        data++;
	}
	return nullptr;
}

// 消费
void *consume(void *age)
{
	BlockQueue<int> *bq = static_cast<BlockQueue<int> *>(age);
	while (true)
	{
		sleep(2);
		int data;
		// 1. 从bq拿到数据
		bq->Pop(&data);
		// 2.做处理
		printf("Consumer, 消费了一个数据: %d\n", data);
	}
	return nullptr;
}

int main()
{
	pthread_t p1,p2,p3, c1,c2;
	BlockQueue<int> *bq = new BlockQueue<int>(5);
	pthread_create(&p1, nullptr, production, bq);
	pthread_create(&p2, nullptr, production, bq);
	pthread_create(&p3, nullptr, production, bq);
	pthread_create(&c1, nullptr, consume, bq);
	pthread_create(&c2, nullptr, consume, bq);

	pthread_join(p1, nullptr);
	pthread_join(c1, nullptr);
	return 0;
}